<?php
/**
 * @author yuanyitian
 * @date 2024/10/21 6:24
 */

namespace api\admin;

use utils\base64_to_file;
use utils\oss;

class order
{

    //订单导出
    public function export($data){
        $name=$data['name'];//联系人
        $phone=$data['phone'];//手机号
        $order_no=$data['order_no'];//订单号
        $type=$data['type'];//订单类型（0：堂食，1：配送，2：预定）
        $time_type=$data['time_type'];//餐类型（0：未定义，1：早餐，2：午餐，3：晚餐）
        $send_user_id=$data['send_user_id'];//配送员用户id
        $send_type=(int)$data['send_type'];//配送类型（-1：全部，0：待接单，1：待配送，2：已配送）
        $pay_type=$data['pay_type'];//支付方式（0：余额支付，1：微信支付）
        $status=$data['status'];//状态（-2：已退款，-1：已取消，0：待支付，1：已支付）
        $range_time=(int)$data['range_time'];//时间类型（-1：全部，1：支付时间，2：订单创建时间，3：接单时间，4：：配送时间，5：取消时间，6：退款时间）
        $start_time=strtotime($data['start_time']);//开始时间
        $end_time=strtotime($data['end_time']);//结束时间
        $org=$data['org'];//部门名

        $where=" where a.is_delete=1 ";
        if(!empty($org)){//部门名
            $where.=" and b.org like '%$org%'";
        }
        if(!empty($name)){//联系人
            $where.=" and a.name like '%$name%'";
        }
        if(!empty($phone)){//联系电话
            $where.=" and a.phone like '%$phone%'";
        }
        if(!empty($order_no)){//订单号
            $where.=" and a.order_no like '%$order_no%'";
        }
        if(!empty($type)){//订单类型（0：堂食，1：配送，2：预定）
            $type=implode(',',$type);
            $where.=" and a.type in ($type)";
        }
        if(!empty($time_type)){//餐类型（0：未定义，1：早餐，2：午餐，3：晚餐）
            $time_type=implode(',',$time_type);
            $where.=" and a.time_type in ($time_type)";
        }
        if(!empty($pay_type)){//支付方式（0：余额支付，1：微信支付）
            $pay_type=implode(',',$pay_type);
            $where.=" and a.pay_type in ($pay_type)";
        }
        if(!empty($status)){//状态（-2：已退款，-1：已取消，0：待支付，1：已支付）
            $status=implode(',',$status);
            $where.=" and a.status in ($status)";
        }
        if(!empty($send_user_id)){//配送员用户id
            $send_user_id=implode(',',$send_user_id);
            $where.=" and a.send_user_id in ($send_user_id)";
        }
        switch ($send_type){//配送类型（-1：全部，0：待接单，1：待配送，2：已配送）
            case -1://全部
                break;
            case 0://待接单
                $where.=" and a.accept_time is null";
                break;
            case 1://待配送
                $where.=" and a.accept_time is not null and send_time is null";
                break;
            case 2://已配送
                $where.=" and a.accept_time is not null and send_time is not null";
                break;
            default:
                break;
        }

        if($start_time!=0&&$end_time!=0){
            switch ($range_time){//时间类型（-1：全部，1：支付时间，2：订单创建时间，3：接单时间，4：：配送时间，5：取消时间，6：退款时间）
                case -1://全部
                    break;
                case 1://支付时间
                    $where.=" and a.pay_time between $start_time and $end_time";
                    break;
                case 2://订单创建时间
                    $where.=" and a.create_time between $start_time and $end_time";
                    break;
                case 3://接单时间
                    $where.=" and a.accept_time between $start_time and $end_time";
                    break;
                case 4://配送时间
                    $where.=" and a.send_time between $start_time and $end_time";
                    break;
                case 5://取消时间
                    $where.=" and a.cancel_time between $start_time and $end_time";
                    break;
                case 6://退款时间
                    $where.=" and a.refund_time between $start_time and $end_time";
                    break;
                default:
                    break;
            }
        }

        $limit=" order by a.create_time DESC";
        $sql="select a.*,b.org from `order` a left join user b on (a.user_id=b.id)".$where;

        $con=con();
        $data=mysqli_query($con,$sql.$limit);
        $data=mysqli_fetch_all($data,true);

        if(count($data)!=0){
            $order_ids=implode(',',array_column($data,'id'));
            $info=mysqli_query($con,"select a.*,b.name,b.img_url from order_item a left join goods b on (a.goods_id=b.id) where a.order_id in (".$order_ids.")");
            $info=mysqli_fetch_all($info,true);
            for($i=0;$i<count($data);$i++){
                switch ($data[$i]['status']){
                    case -2://已退款
                        $data[$i]['status_text']='已退款';
                        break;
                    case -1://已取消
                        $data[$i]['status_text']='已取消';
                        break;
                    case 1://支付成功
                        $data[$i]['status_text']='支付成功';
                        break;
                    case 0://待支付
                        $data[$i]['status_text']='待支付';
                        break;
                    default:
                        $data[$i]['status_text']='未知状态';
                        break;
                }
                switch ($data[$i]['type']){
                    case 0:
                        $data[$i]['type_text']='堂食';
                        $data[$i]['type_tiny_text']='堂';
                        break;
                    case 1:
                        $data[$i]['type_text']='配送';
                        $data[$i]['type_tiny_text']='送';
                        break;
                    case 2:
                        $data[$i]['type_text']='预定';
                        $data[$i]['type_tiny_text']='定';
                        break;
                    default:
                        $data[$i]['type_text']='未知类型';
                        $data[$i]['type_tiny_text']='未';
                        break;
                }
                switch ($data[$i]['time_type']){
                    case 0:
                        $data[$i]['time_type_text']='未定义';
                        $data[$i]['time_type_tiny_text']='未';
                        break;
                    case 1:
                        $data[$i]['time_type_text']='早餐';
                        $data[$i]['time_type_tiny_text']='早';
                        break;
                    case 2:
                        $data[$i]['time_type_text']='午餐';
                        $data[$i]['time_type_tiny_text']='午';
                        break;
                    case 3:
                        $data[$i]['time_type_text']='晚餐';
                        $data[$i]['time_type_tiny_text']='晚';
                        break;
                    default:
                        $data[$i]['time_type_text']='未知类型';
                        $data[$i]['time_type_tiny_text']='未';
                        break;
                }
                switch ($data[$i]['pay_type']){
                    case 0:
                        $data[$i]['pay_type_text']='余额支付';
                        $data[$i]['pay_type_tiny_text']='余';
                        break;
                    case 1:
                        $data[$i]['pay_type_text']='微信支付';
                        $data[$i]['pay_type_tiny_text']='微';
                        break;
                    default:
                        $data[$i]['pay_type_text']='未知支付';
                        $data[$i]['pay_type_tiny_text']='未';
                        break;
                }
                $data[$i]['item']=[];
                $data[$i]['money']=sprintf('%.2f',$data[$i]['money']/100);
                if(empty($data[$i]['create_time'])){//订单创建时间
                    $data[$i]['create_time']='';
                }else{
                    $data[$i]['create_time']=date('Y-m-d H:i:s',$data[$i]['create_time']);
                }
                if(empty($data[$i]['update_time'])){//订单修改时间
                    $data[$i]['update_time']='';
                }else{
                    $data[$i]['update_time']=date('Y-m-d H:i:s',$data[$i]['update_time']);
                }
                if(empty($data[$i]['pay_time'])){//订单支付时间
                    $data[$i]['pay_time']='';
                }else{
                    $data[$i]['pay_time']=date('Y-m-d H:i:s',$data[$i]['pay_time']);
                }
                if(empty($data[$i]['accept_time'])){//骑手接单时间
                    $data[$i]['accept_time']='';
                }else{
                    $data[$i]['accept_time']=date('Y-m-d H:i:s',$data[$i]['accept_time']);
                }
                if(empty($data[$i]['send_time'])){//骑手送达时间
                    $data[$i]['send_time']='';
                }else{
                    $data[$i]['send_time']=date('Y-m-d H:i:s',$data[$i]['send_time']);
                }
                if(empty($data[$i]['cancel_time'])){//订单取消时间
                    $data[$i]['cancel_time']='';
                }else{
                    $data[$i]['cancel_time']=date('Y-m-d H:i:s',$data[$i]['cancel_time']);
                }
                if(empty($data[$i]['refund_time'])){//订单退款时间
                    $data[$i]['refund_time']='';
                }else{
                    $data[$i]['refund_time']=date('Y-m-d H:i:s',$data[$i]['refund_time']);
                }
                if(empty($data[$i]['send_name'])){//骑手名字
                    $data[$i]['send_name']='';
                }
                if(empty($data[$i]['send_phone'])){//骑手手机号
                    $data[$i]['send_phone']='';
                }
                for($o=0;$o<count($info);$o++){
                    if($data[$i]['id']==$info[$o]['order_id']){
                        $info[$o]['price']=sprintf('%.2f',$info[$o]['price']/100);
                        $info[$o]['money']=sprintf('%.2f',$info[$o]['money']/100);
                        if(!empty($info[$o]['img_url'])){
                            $info[$o]['img_url']=explode(',',$info[$o]['img_url']);
                        }
                        $data[$i]['item'][]=$info[$o];
                    }
                }
            }
        }

        mysqli_close($con);

        $file_id=uniqid();

        $path = tempnam(sys_get_temp_dir(), $file_id );
        $handle = fopen($path, "w+");
//        $str="支付方式,支付金额（元）,支付时间,联系人,联系电话,部门,订单类型,订单备注,配送员姓名,配送员电话,配送地址,配送员接单时间,配送员送达时间,预订时间,订单取消时间,订单退款时间,订单创建时间 \r\n";
//        for($i=0;$i<count($data);$i++){
//            $str.='"'.$data[$i]['pay_type_text'].'",'.
//                '"'.$data[$i]['money'].'",'.
//                '"'.$data[$i]['pay_time'].'",'.
//                '"'.$data[$i]['name'].'",'.
//                '"'.$data[$i]['phone'].'",'.
//                '"'.$data[$i]['org'].'",'.
//                '"'.$data[$i]['type_text'].'",'.
//                '"'.$data[$i]['remark'].'",'.
//                '"'.$data[$i]['send_name'].'",'.
//                '"'.$data[$i]['send_phone'].'",'.
//                '"'.$data[$i]['address'].'",'.
//                '"'.$data[$i]['accept_time'].'",'.
//                '"'.$data[$i]['send_time'].'",'.
//                '"'.$data[$i]['pre_time'].'",'.
//                '"'.$data[$i]['cancel_time'].'",'.
//                '"'.$data[$i]['refund_time'].'",'.
//                '"'.$data[$i]['create_time'].'",'."\r\n";
//        }
        //  fwrite($handle, $str);


// 写入 CSV 文件的表头
        $header = [
            '支付方式', '支付金额（元）', '支付时间', '联系人', '联系电话',
            '部门', '订单类型', '订单备注', '配送员姓名', '配送员电话',
            '配送地址', '配送员接单时间', '配送员送达时间', '预订时间',
            '订单取消时间', '订单退款时间', '订单创建时间'
        ];
        fputcsv($handle, $header);

// 写入数据部分
        for ($i = 0; $i < count($data); $i++) {
            $row = [
                $data[$i]['pay_type_text'],
                '="' .$data[$i]['money'].'"',
                // 强制时间字段为文本格式
                '="' . $data[$i]['pay_time'] . '"',
                $data[$i]['name'],
                '="' . $data[$i]['phone'] . '"',
                $data[$i]['org'],
                $data[$i]['type_text'],
                $data[$i]['remark'],
                $data[$i]['send_name'],
                $data[$i]['send_phone'],
                $data[$i]['address'],
                '="' . $data[$i]['accept_time'] . '"',
                '="' . $data[$i]['send_time'] . '"',
                '="' . $data[$i]['pre_time'] . '"',
                '="' . $data[$i]['cancel_time'] . '"',
                '="' . $data[$i]['refund_time'] . '"',
                '="' . $data[$i]['create_time'] . '"'
            ];
            fputcsv($handle, $row);
        }

        fclose($handle);
        $date=date('Y-m-d');
        $res=oss::upload("order/$date/".$file_id.'.csv',$path);
        $url=$res["info"]["url"];

       

        return out_right([
            'url'=>$url
        ]);
    }

    //获取订单分页列表
    public function getList($data){
        $name=$data['name'];//联系人
        $phone=$data['phone'];//手机号
        $order_no=$data['order_no'];//订单号
        $type=$data['type'];//订单类型（0：堂食，1：配送，2：预定）
        $time_type=$data['time_type'];//餐类型（0：未定义，1：早餐，2：午餐，3：晚餐）
        $send_user_id=$data['send_user_id'];//配送员用户id
        $send_type=(int)$data['send_type'];//配送类型（-1：全部，0：待接单，1：待配送，2：已配送）
        $pay_type=$data['pay_type'];//支付方式（0：余额支付，1：微信支付）
        $status=$data['status'];//状态（-2：已退款，-1：已取消，0：待支付，1：已支付）
        $page=(int)$data['page'];//页码
        $size=(int)$data['size'];//尺寸
        $range_time=(int)$data['range_time'];//时间类型（-1：全部，1：支付时间，2：订单创建时间，3：接单时间，4：：配送时间，5：取消时间，6：退款时间）
        $start_time=strtotime($data['start_time']);//开始时间
        $end_time=strtotime($data['end_time']);//结束时间
        $org=$data['org'];//部门名

        $start=($page-1)*$size;
        $where=" where a.is_delete=1 ";
        if(!empty($org)){//部门名
            $where.=" and b.org like '%$org%'";
        }
        if(!empty($name)){//联系人
            $where.=" and a.name like '%$name%'";
        }
        if(!empty($phone)){//联系电话
            $where.=" and a.phone like '%$phone%'";
        }
        if(!empty($order_no)){//订单号
            $where.=" and a.order_no like '%$order_no%'";
        }
        if(!empty($type)){//订单类型（0：堂食，1：配送，2：预定）
            $type=implode(',',$type);
            $where.=" and a.type in ($type)";
        }
        if(!empty($time_type)){//餐类型（0：未定义，1：早餐，2：午餐，3：晚餐）
            $time_type=implode(',',$time_type);
            $where.=" and a.time_type in ($time_type)";
        }
        if(!empty($pay_type)){//支付方式（0：余额支付，1：微信支付）
            $pay_type=implode(',',$pay_type);
            $where.=" and a.pay_type in ($pay_type)";
        }
        if(!empty($status)){//状态（-2：已退款，-1：已取消，0：待支付，1：已支付）
            $status=implode(',',$status);
            $where.=" and a.status in ($status)";
        }
        if(!empty($send_user_id)){//配送员用户id
            $send_user_id=implode(',',$send_user_id);
            $where.=" and a.send_user_id in ($send_user_id)";
        }
        switch ($send_type){//配送类型（-1：全部，0：待接单，1：待配送，2：已配送）
            case -1://全部
                break;
            case 0://待接单
                $where.=" and a.accept_time is null";
                break;
            case 1://待配送
                $where.=" and a.accept_time is not null and send_time is null";
                break;
            case 2://已配送
                $where.=" and a.accept_time is not null and send_time is not null";
                break;
            default:
                break;
        }

        if($start_time!=0&&$end_time!=0){
            switch ($range_time){//时间类型（-1：全部，1：支付时间，2：订单创建时间，3：接单时间，4：：配送时间，5：取消时间，6：退款时间）
                case -1://全部
                    break;
                case 1://支付时间
                    $where.=" and a.pay_time between $start_time and $end_time";
                    break;
                case 2://订单创建时间
                    $where.=" and a.create_time between $start_time and $end_time";
                    break;
                case 3://接单时间
                    $where.=" and a.accept_time between $start_time and $end_time";
                    break;
                case 4://配送时间
                    $where.=" and a.send_time between $start_time and $end_time";
                    break;
                case 5://取消时间
                    $where.=" and a.cancel_time between $start_time and $end_time";
                    break;
                case 6://退款时间
                    $where.=" and a.refund_time between $start_time and $end_time";
                    break;
                default:
                    break;
            }
        }

        $limit=" order by a.create_time DESC limit $start,$size";
        $sql="select a.*,b.org from `order` a left join user b on (a.user_id=b.id)".$where;

        $con=con();
        $data=mysqli_query($con,$sql.$limit);
        $data=mysqli_fetch_all($data,true);
        $total=mysqli_query($con,$sql);
        $total=mysqli_num_rows($total);

        if(count($data)!=0){
            $order_ids=implode(',',array_column($data,'id'));
            $info=mysqli_query($con,"select a.*,b.name,b.img_url from order_item a left join goods b on (a.goods_id=b.id) where a.order_id in (".$order_ids.")");
            $info=mysqli_fetch_all($info,true);
            for($i=0;$i<count($data);$i++){
                switch ($data[$i]['status']){
                    case -2://已退款
                        $data[$i]['status_text']='已退款';
                        break;
                    case -1://已取消
                        $data[$i]['status_text']='已取消';
                        break;
                    case 1://支付成功
                        $data[$i]['status_text']='支付成功';
                        break;
                    case 0://待支付
                        $data[$i]['status_text']='待支付';
                        break;
                    default:
                        $data[$i]['status_text']='未知状态';
                        break;
                }
                switch ($data[$i]['type']){
                    case 0:
                        $data[$i]['type_text']='堂食';
                        $data[$i]['type_tiny_text']='堂';
                        break;
                    case 1:
                        $data[$i]['type_text']='配送';
                        $data[$i]['type_tiny_text']='送';
                        break;
                    case 2:
                        $data[$i]['type_text']='预定';
                        $data[$i]['type_tiny_text']='定';
                        break;
                    default:
                        $data[$i]['type_text']='未知类型';
                        $data[$i]['type_tiny_text']='未';
                        break;
                }
                switch ($data[$i]['time_type']){
                    case 0:
                        $data[$i]['time_type_text']='未定义';
                        $data[$i]['time_type_tiny_text']='未';
                        break;
                    case 1:
                        $data[$i]['time_type_text']='早餐';
                        $data[$i]['time_type_tiny_text']='早';
                        break;
                    case 2:
                        $data[$i]['time_type_text']='午餐';
                        $data[$i]['time_type_tiny_text']='午';
                        break;
                    case 3:
                        $data[$i]['time_type_text']='晚餐';
                        $data[$i]['time_type_tiny_text']='晚';
                        break;
                    default:
                        $data[$i]['time_type_text']='未知类型';
                        $data[$i]['time_type_tiny_text']='未';
                        break;
                }
                switch ($data[$i]['pay_type']){
                    case 0:
                        $data[$i]['pay_type_text']='余额支付';
                        $data[$i]['pay_type_tiny_text']='余';
                        break;
                    case 1:
                        $data[$i]['pay_type_text']='微信支付';
                        $data[$i]['pay_type_tiny_text']='微';
                        break;
                    default:
                        $data[$i]['pay_type_text']='未知支付';
                        $data[$i]['pay_type_tiny_text']='未';
                        break;
                }
                $data[$i]['item']=[];
                $data[$i]['money']=sprintf('%.2f',$data[$i]['money']/100);
                if(empty($data[$i]['create_time'])){//订单创建时间
                    $data[$i]['create_time']='';
                }else{
                    $data[$i]['create_time']=date('Y-m-d H:i:s',$data[$i]['create_time']);
                }
                if(empty($data[$i]['update_time'])){//订单修改时间
                    $data[$i]['update_time']='';
                }else{
                    $data[$i]['update_time']=date('Y-m-d H:i:s',$data[$i]['update_time']);
                }
                if(empty($data[$i]['pay_time'])){//订单支付时间
                    $data[$i]['pay_time']='';
                }else{
                    $data[$i]['pay_time']=date('Y-m-d H:i:s',$data[$i]['pay_time']);
                }
                if(empty($data[$i]['cancel_time'])){//订单取消时间
                    $data[$i]['cancel_time']='';
                }else{
                    $data[$i]['cancel_time']=date('Y-m-d H:i:s',$data[$i]['cancel_time']);
                }
                if(empty($data[$i]['refund_time'])){//订单退款时间
                    $data[$i]['refund_time']='';
                }else{
                    $data[$i]['refund_time']=date('Y-m-d H:i:s',$data[$i]['refund_time']);
                }
                if(empty($data[$i]['accept_time'])){//骑手接单时间
                    $data[$i]['accept_time']='';
                }else{
                    $data[$i]['accept_time']=date('Y-m-d H:i:s',$data[$i]['accept_time']);
                }
                if(empty($data[$i]['send_time'])){//骑手送达时间
                    $data[$i]['send_time']='';
                }else{
                    $data[$i]['send_time']=date('Y-m-d H:i:s',$data[$i]['send_time']);
                }
                if(empty($data[$i]['send_name'])){//骑手名字
                    $data[$i]['send_name']='';
                }
                if(empty($data[$i]['send_phone'])){//骑手手机号
                    $data[$i]['send_phone']='';
                }
                for($o=0;$o<count($info);$o++){
                    if($data[$i]['id']==$info[$o]['order_id']){
                        $info[$o]['price']=sprintf('%.2f',$info[$o]['price']/100);
                        $info[$o]['money']=sprintf('%.2f',$info[$o]['money']/100);
                        if(!empty($info[$o]['img_url'])){
                            $info[$o]['img_url']=explode(',',$info[$o]['img_url']);
                        }
                        $data[$i]['item'][]=$info[$o];
                    }
                }
            }
        }

        mysqli_close($con);
        return out_right([
            'data'=>$data,
            'page'=>$page,
            'size'=>$size,
            'total'=>$total,
            'total_page'=>ceil($total/$size)
        ]);
    }
}